﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace QLSV
{
    public partial class ThongTinDiemThanhPhan : Form
    {
        public ThongTinDiemThanhPhan()
        {
            InitializeComponent();
        }

        private SqlConnection Con;
        private DataTable Dt = new DataTable("DiemTP");
        private DataTable DtDTP = new DataTable("DiemTP");
        private DataTable DtSV = new DataTable("SinhVien");
        private DataTable DtMH = new DataTable("MonHoc");
        private SqlDataAdapter Da = new SqlDataAdapter();
        private Boolean Kt;

        private void Connect()
        {
            String Cn = "Data Source=LENOVOY510\\SQLEXPRESS;Initial Catalog=QLSV;Integrated Security=True";
            try
            {
                Con = new SqlConnection(Cn);
                Con.Open();
            }
            catch (Exception Ex)
            {
                MessageBox.Show("Không Thể Kết Nối Đến Cơ Sở Dữ Liệu!", "Lỗi!", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }
        }

        private void DisConnect()
        {
            Con.Close();
            Con.Dispose();
            Con = null;
        }

        private void DiemTP_Load(object sender, EventArgs e)
        {
            Connect();
            GetData1();
            GetData();
            Binding();
        }

        private void GetData()
        {
            SqlCommand Com = new SqlCommand();
            Com.Connection = Con;
            Com.CommandType = CommandType.Text;
            Com.CommandText = "Select * from DiemTP";
            Da.SelectCommand = Com;
            Da.Fill(DtDTP);

            Com.CommandText = "Select * from MonHoc";
            Da.SelectCommand = Com;
            Da.Fill(DtMH);
            cbtmh.DataSource = DtMH;
            cbtmh.DisplayMember = "TenMH";
            cbtmh.ValueMember = "MaMH";
            cbtmh.SelectedValue = "MaMH";

            Com.CommandType = CommandType.Text;
            Com.CommandText = @"Select DMaSV as N'Mã Sinh Viên',
                                          Ho as N'Họ',
                                          Ten as N'Tên',
                                          TenMH as N'Tên Môn Học',
                                          CNganh as N'Chuyên Ngành',
                                          DiemHS1 as N'Điểm Hệ Số 1',
                                          DiemHS2 as N'Điểm Hệ Số 2',
                                          DiemHS7 as N'Điểm Hệ Số 7',
                                          DiemTB10 as N'Điểm Trung Bình Thang Điểm 10',
                                          DiemTB4 as N'Điểm Trung Bình Thang Điểm 4',
                                          DiemTBChu as N'Điểm Trung Bình Bằng Chữ'
                                   from DiemTP inner join SinhVien
                                          on DiemTP.DMaSV  = SinhVien.MaSV                                                 
                                                 inner join MonHoc
                                          on DiemTP.DMaMH = MonHoc.MaMH";
            Da.SelectCommand = Com;
            Da.Fill(Dt);
            dgvttdtp.DataSource = Dt;

            dgvttdtp.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgvttdtp.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgvttdtp.Columns[2].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgvttdtp.Columns[4].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgvttdtp.Columns[5].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgvttdtp.Columns[6].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgvttdtp.Columns[7].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgvttdtp.Columns[8].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgvttdtp.Columns[9].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgvttdtp.Columns[10].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
        }

        private void GetData1()
        {
            SqlCommand Com = new SqlCommand();
            Com.Connection = Con;

            Com.CommandType = CommandType.Text;
            Com.CommandText = @"Select MaSV as N'Mã Sinh Viên',
                                          Ho as N'Họ',
                                          Ten as N'Tên',
                                          GioiTinh as N'Giới Tính',
                                          NgaySinh as N'Ngày Sinh',
	                                      (year(getdate())-year(NgaySinh)) as N'Tuổi',
	                                      DiaChi as N'Địa Chỉ',
                                          QueQuan as N'Quê Quán',
                                          TenLop0 as N'Lớp',
                                          ChuyenNganh as N'Chuyên Ngành'
                                   from SinhVien inner join SinhVien_Lop_Now
                                          on SinhVien.MaSV = SinhVien_Lop_Now.MaSV2                                                 
                                                 inner join Lop_Only
                                          on SinhVien_Lop_Now.MaLop2 = Lop_Only.MaLop0
                                                 left outer join Lop
                                          on SinhVien_Lop_Now.PS2 = Lop.PS
                                   order by MaSV";
            Da.SelectCommand = Com;
            Da.Fill(DtSV);
            dgvttsv.DataSource = DtSV;

            dgvttsv.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgvttsv.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgvttsv.Columns[2].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgvttsv.Columns[3].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
            dgvttsv.Columns[4].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgvttsv.Columns[5].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgvttsv.Columns[6].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgvttsv.Columns[7].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgvttsv.Columns[8].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgvttsv.Columns[9].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
        }

        private void Binding()
        {
            txtmsv.DataBindings.Clear();
            txtmsv.DataBindings.Add("Text", dgvttdtp.DataSource, "Mã Sinh Viên");
            txtmsvtk.DataBindings.Clear();
            txtmsvtk.DataBindings.Add("Text", dgvttsv.DataSource, "Mã Sinh Viên");
            txth.DataBindings.Clear();
            txth.DataBindings.Add("Text", dgvttdtp.DataSource, "Họ");
            txtt.DataBindings.Clear();
            txtt.DataBindings.Add("Text", dgvttdtp.DataSource, "Tên");
            cbtmh.DataBindings.Clear();
            cbtmh.DataBindings.Add("Text", dgvttdtp.DataSource, "Tên Môn Học");
            txtcn.DataBindings.Clear();
            txtcn.DataBindings.Add("Text", dgvttdtp.DataSource, "Chuyên Ngành");
            txths1.DataBindings.Clear();
            txths1.DataBindings.Add("Text", dgvttdtp.DataSource, "Điểm Hệ Số 1");
            txths2.DataBindings.Clear();
            txths2.DataBindings.Add("Text", dgvttdtp.DataSource, "Điểm Hệ Số 2");
            txths7.DataBindings.Clear();
            txths7.DataBindings.Add("Text", dgvttdtp.DataSource, "Điểm Hệ Số 7");
            txtdtb10.DataBindings.Clear();
            txtdtb10.DataBindings.Add("Text", dgvttdtp.DataSource, "Điểm Trung Bình Thang Điểm 10");
            txtdtb4.DataBindings.Clear();
            txtdtb4.DataBindings.Add("Text", dgvttdtp.DataSource, "Điểm Trung Bình Thang Điểm 4");
            txtdtbc.DataBindings.Clear();
            txtdtbc.DataBindings.Add("Text", dgvttdtp.DataSource, "Điểm Trung Bình Bằng Chữ");
        }

        private void clickthoat_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Bạn Có Muốn Thoát Không?", "Thoát!", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                Close();
                Dispose();
            }
        }

        private void clickhuy_Click(object sender, EventArgs e)
        {
            txths1.Text = "";
            txths2.Text = "";
            txths7.Text = "";
            txtdtb10.Text = "";
            txtdtb4.Text = "";
            txtdtbc.Text = "";
        }

        private void clickxoa_Click(object sender, EventArgs e)
        {
            if (txtmsv.Text.Length > 0)
            {
                /*DataRow DtR = Dt.Select("[Mã Sinh Viên] = " + (txtmsv.Text))[0];
                DtR.BeginEdit();
                DtR.Delete();
                DtR.EndEdit();
                SqlCommand ComDelete = new SqlCommand();
                ComDelete.Connection = Con;
                ComDelete.CommandType = CommandType.Text;
                ComDelete.CommandText = @"Delete from DiemTP where DMaSV = @DMaSV and DMaMH = @DMaMH";
                ComDelete.Parameters.Add("@DMaSV", SqlDbType.NChar, 10, "Mã Sinh Viên");
                ComDelete.Parameters.Add("@DMaMH", SqlDbType.NChar, 10, "Tên Môn Học");
                Da.DeleteCommand = ComDelete;
                Da.Update(Dt);*/
                SqlCommand Com = new SqlCommand();
                Com.Connection = Con;
                Com.CommandType = CommandType.StoredProcedure;
                Com.CommandText = "XoaDiem";
                Com.Parameters.Add("@MaSV", SqlDbType.NChar, 10).Value = txtmsv.Text;
                Com.Parameters.Add("@MaMH", SqlDbType.NChar, 10).Value = cbtmh.SelectedValue;
                SqlDataReader Dr = Com.ExecuteReader();
                Dt.Load(Dr);
                MessageBox.Show("Bạn Đã Xóa Thành Công!!!", "Thông Báo!!!", MessageBoxButtons.OK);
                Dt.Clear();
                Da.Fill(Dt);
            }

        }

        private void clicksua_Click(object sender, EventArgs e)
        {
            if (txtmsv.Text.Length > 0)
            {
                KiemTra();
                if (Kt == true)
                {
                    DataRow DtR = Dt.Select("[Mã Sinh Viên] = " + (txtmsv.Text))[0];
                    DtR.BeginEdit();
                    DtR["Tên Môn Học"] = cbtmh.SelectedValue;
                    DtR["Điểm Hệ Số 1"] = txths1.Text;
                    DtR["Điểm Hệ Số 2"] = txths2.Text;
                    DtR["Điểm Hệ Số 7"] = txths7.Text;
                    DtR["Điểm Trung Bình Thang Điểm 10"] = txtdtb10.Text;
                    DtR["Điểm Trung Bình Thang Điểm 4"] = txtdtb4.Text;
                    DtR["Điểm Trung Bình Bằng Chữ"] = txtdtbc.Text;
                    DtR.EndEdit();
                    SqlCommand ComUpdate = new SqlCommand();
                    ComUpdate.Connection = Con;
                    ComUpdate.CommandType = CommandType.Text;
                    ComUpdate.CommandText = @"Update DiemTP set  DiemHS1 = @DiemHS1,
                                                                 DiemHS2 = @DiemHS2,
                                                                 DiemHS7 = @DiemHS7,                       
                                                                 DiemTB10 = @DiemTB10,
                                                                 DiemTB4 = @DiemTB4,                                      
                                                                 DiemTBChu = @DiemTBChu           
                                                                 where DMaSV = @DMaSV and DMaMH = @DMaMH";
                    ComUpdate.Parameters.Add("@DMaSV", SqlDbType.NChar, 10, "Mã Sinh Viên");
                    ComUpdate.Parameters.Add("@DMaMH", SqlDbType.NChar, 10, "Tên Môn Học");
                    ComUpdate.Parameters.Add("@DiemHS1", SqlDbType.Float, 30, "Điểm Hệ Số 1");
                    ComUpdate.Parameters.Add("@DiemHS2", SqlDbType.Float, 30, "Điểm Hệ Số 2");
                    ComUpdate.Parameters.Add("@DiemHS7", SqlDbType.Float, 30, "Điểm Hệ Số 7");              

                    float a = float.Parse(txths1.Text);                    
                    float b = float.Parse(txths2.Text);
                    float c = float.Parse(txths7.Text);

                    if (a != 0)
                    {
                        float DTB10 = a + b + c;

                        string DiemTB10 = String.Format("{0:0.0}", DTB10);

                        ComUpdate.Parameters.Add("@DiemTB10", SqlDbType.Float, 30).Value = DiemTB10;

                        if (DTB10 < 4)
                        {
                            ComUpdate.Parameters.Add("@DiemTBChu", SqlDbType.NVarChar, 10).Value = "F";
                            ComUpdate.Parameters.Add("@DiemTB4", SqlDbType.Float, 30).Value = 0;
                        }
                        else if ((DTB10 >= 4) && (DTB10 < 5))
                        {
                            ComUpdate.Parameters.Add("@DiemTBChu", SqlDbType.NVarChar, 10).Value = "D";
                            ComUpdate.Parameters.Add("@DiemTB4", SqlDbType.Float, 30).Value = 1;
                        }
                        else if ((DTB10 >= 5) && (DTB10 < 5.5))
                        {
                            ComUpdate.Parameters.Add("@DiemTBChu", SqlDbType.NVarChar, 10).Value = "D+";
                            ComUpdate.Parameters.Add("@DiemTB4", SqlDbType.Float, 30).Value = 1.5;
                        }
                        else if ((DTB10 >= 5.5) && (DTB10 < 6.5))
                        {
                            ComUpdate.Parameters.Add("@DiemTBChu", SqlDbType.NVarChar, 10).Value = "C";
                            ComUpdate.Parameters.Add("@DiemTB4", SqlDbType.Float, 30).Value = 2;
                        }
                        else if ((DTB10 >= 6.5) && (DTB10 < 7))
                        {
                            ComUpdate.Parameters.Add("@DiemTBChu", SqlDbType.NVarChar, 10).Value = "C+";
                            ComUpdate.Parameters.Add("@DiemTB4", SqlDbType.Float, 30).Value = 2.5;
                        }
                        else if ((DTB10 >= 7) && (DTB10 < 8))
                        {
                            ComUpdate.Parameters.Add("@DiemTBChu", SqlDbType.NVarChar, 10).Value = "B";
                            ComUpdate.Parameters.Add("@DiemTB4", SqlDbType.Float, 30).Value = 3;
                        }
                        else if ((DTB10 >= 8) && (DTB10 < 8.5))
                        {
                            ComUpdate.Parameters.Add("@DiemTBChu", SqlDbType.NVarChar, 10).Value = "B+";
                            ComUpdate.Parameters.Add("@DiemTB4", SqlDbType.Float, 30).Value = 3.5;
                        }
                        else if ((DTB10 >= 8.5) && (DTB10 < 9))
                        {
                            ComUpdate.Parameters.Add("@DiemTBChu", SqlDbType.NVarChar, 10).Value = "A";
                            ComUpdate.Parameters.Add("@DiemTB4", SqlDbType.Float, 30).Value = 3.7;
                        }
                        else if (DTB10 >= 9)
                        {
                            ComUpdate.Parameters.Add("@DiemTBChu", SqlDbType.NVarChar, 10).Value = "A+";
                            ComUpdate.Parameters.Add("@DiemTB4", SqlDbType.Float, 30).Value = 4;
                        }
                    }
                    else
                    {
                        ComUpdate.Parameters.Add("@DiemTBChu", SqlDbType.NVarChar, 10).Value = "F";
                        ComUpdate.Parameters.Add("@DiemTB4", SqlDbType.Float, 30).Value = 0;
                        ComUpdate.Parameters.Add("@DiemTB10", SqlDbType.Float, 30).Value = 0;
                    }                    

                    Da.UpdateCommand = ComUpdate;
                    Da.Update(Dt);

                    MessageBox.Show("Bạn Đã Sửa Thành Công!", "Thông Báo!", MessageBoxButtons.OK);
                    Close();
                    Dispose();
                    ThongTinDiemThanhPhan TTDTP = new ThongTinDiemThanhPhan();
                    TTDTP.Show();
                }
            }

            else
            {
                MessageBox.Show("Không Thể Thực Hiện!", "Thông Báo!", MessageBoxButtons.OK);
            }
        }

        private bool KiemTra()
        {
            Kt = true;

            float n1,n2,n3;

            n1 = float.Parse(txths1.Text);
            n2 = float.Parse(txths2.Text);
            n3 = float.Parse(txths7.Text);

            if ((txths1.Text != "") && (n1 < 0))
            {
                MessageBox.Show("Nhập Lại Điểm Hệ Số 1!", "Thông Báo!", MessageBoxButtons.OK);
                Kt = false;
            }

            if ((txths1.Text != "") && (n1 > 1))
            {
                MessageBox.Show("Nhập Lại Điểm Hệ Số 1!", "Thông Báo!", MessageBoxButtons.OK);
                Kt = false;
            }

            if ((txths2.Text != "") && (n2 < 0))
            {
                MessageBox.Show("Nhập Lại Điểm Hệ Số 2!", "Thông Báo!", MessageBoxButtons.OK);
                Kt = false;
            }

            if ((txths2.Text != "") && (n2 > 2))
            {
                MessageBox.Show("Nhập Lại Điểm Hệ Số 2!", "Thông Báo!", MessageBoxButtons.OK);
                Kt = false;
            }

            if ((txths7.Text != "") && (n2 < 0))
            {
                MessageBox.Show("Nhập Lại Điểm Hệ Số 7!", "Thông Báo!", MessageBoxButtons.OK);
                Kt = false;
            }

            if ((txths7.Text != "") && (n2 > 7))
            {
                MessageBox.Show("Nhập Lại Điểm Hệ Số 7!", "Thông Báo!", MessageBoxButtons.OK);
                Kt = false;
            }

            return Kt;
        }

        private void clickthem_Click(object sender, EventArgs e)
        {
            ThemDiemTP TDTP = new ThemDiemTP();
            TDTP.Show();
        }

        private void clicktimkiem_Click(object sender, EventArgs e)
        {
            Dt.Clear();
            SqlCommand Com = new SqlCommand();
            Com.Connection = Con;
            Com.CommandType = CommandType.Text;

            if (txtmsvtk.Text != "")
            {
                Com.CommandText = @"Select DMaSV as N'Mã Sinh Viên',
                                          Ho as N'Họ',
                                          Ten as N'Tên',
                                          TenMH as N'Tên Môn Học',
                                          CNganh as N'Chuyên Ngành',
                                          DiemHS1 as N'Điểm Hệ Số 1',
                                          DiemHS2 as N'Điểm Hệ Số 2',
                                          DiemHS7 as N'Điểm Hệ Số 7',
                                          DiemTB10 as N'Điểm Trung Bình Thang Điểm 10',
                                          DiemTB4 as N'Điểm Trung Bình Thang Điểm 4',
                                          DiemTBChu as N'Điểm Trung Bình Bằng Chữ'
                                   from DiemTP inner join SinhVien
                                          on DiemTP.DMaSV  = SinhVien.MaSV                                                 
                                                 inner join MonHoc
                                          on DiemTP.DMaMH = MonHoc.MaMH
                                   where MaSV = @MaSV";

                Com.Parameters.Add("@MaSV", SqlDbType.NVarChar, 10).Value = txtmsvtk.Text;

                Da.SelectCommand = Com;
                Da.Fill(Dt);

                if (Dt.Rows.Count > 0)
                {
                    dgvttdtp.DataSource = Dt;
                }
                else
                {
                    MessageBox.Show("Không Tìm Thấy Dữ Liệu Phù Hợp!", "Thông Báo!", MessageBoxButtons.OK);
                }
            }

            if (txtmsvtk.Text == "")
            {
                Com.CommandText = @"Select DMaSV as N'Mã Sinh Viên',
                                          Ho as N'Họ',
                                          Ten as N'Tên',
                                          TenMH as N'Tên Môn Học',
                                          CNganh as N'Chuyên Ngành',
                                          DiemHS1 as N'Điểm Hệ Số 1',
                                          DiemHS2 as N'Điểm Hệ Số 2',
                                          DiemHS7 as N'Điểm Hệ Số 7',
                                          DiemTB10 as N'Điểm Trung Bình Thang Điểm 10',
                                          DiemTB4 as N'Điểm Trung Bình Thang Điểm 4',
                                          DiemTBChu as N'Điểm Trung Bình Bằng Chữ'
                                   from DiemTP inner join SinhVien
                                          on DiemTP.DMaSV  = SinhVien.MaSV                                                 
                                                 inner join MonHoc
                                          on DiemTP.DMaMH = MonHoc.MaMH";

                Da.SelectCommand = Com;
                Da.Fill(Dt);
                dgvttdtp.DataSource = Dt;
            }
        }
    }
}
